home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / g_quake / qentity.zip / QENTITY.TXT < prev    next >
Text File  |  1996-07-07  |  20KB  |  555 lines

  1. Quake Entities
  2.  
  3. Original text info on entities by Niklata (Nicholas Dwarkanath) - nichd@norfolk.infi.net
  4. Additions and HTMLization by Thomas Winzig - thomas.winzig@webcom.com
  5.  
  6. You can get the most up-to-date version of the Quake Entity Specs (http://www.infi.net/~nichd/qentity.html) from Niklata's Technical Resources (http://www.infi.net/~nichd/). 
  7.  
  8. This is the text version of the Quake Entities specs.  It is not updated as frequently as the HTML version and it certainly does not look as good.  You may not distribute the text version of the Quake Entities list without first packaging the HTML version in the same archive as the text version is being distributed in.  Reason: This version looks bad and is more difficult to read/navigate than the HTML version.  This version is here solely for those without HTML viewers/web browsers.
  9.  
  10. **WARNING - BADLY FORMATTED TEXT ALERT - AUTO-CONVERTED FROM HTML**
  11.  
  12. Here's a good list of entities and their properties. This should help you
  13. in making editors/building MAP files. If you find an error, or figure something out
  14. that I don't know, please email Niklata. I'll put your contribution and you'll get your name in here as well. 
  15. When I give you frameworks for a structure, the individual entries can be in any order, and lots are optional. I try to mark if an
  16. entry is optional. Lots of stuff here may be optional, I just haven't tested it yet to know. I'll clean
  17. up this list later once I do some testing, so don't worry. 
  18.  
  19. In a "" block, your choices for that block are delimited by commas. 
  20.  
  21. I'll get to describing the "spawnflags" tag in a bit - it controls stuff
  22. like difficulty levels, etc. It won't take me long to do... I'll have it finished
  23. soon. 
  24.  
  25. Table of Contents
  26.  
  27. Section 1: Intro
  28. 1.1: What's New 
  29. 1.2: Contributors
  30.  
  31. Section 2: General entity/.map information
  32. 2.1: .map Header (entity #0)
  33. 2.2: "spawnflags" tag 
  34. 2.3: Optional parameters for triggers 
  35. 2.4: General entity syntax 
  36. 2.5: General entity list 
  37.  
  38. Section 3: Entity 'class' examples
  39. 3.1: Lights 
  40. 3.2: Player movement tags 
  41. 3.3: Movers (Doors, plats, etc) 
  42. 3.4: Triggers/Switches 
  43. 3.5: Traps/Things harmful to you 
  44. 3.6: Misc./Stuff I have no idea about 
  45.  
  46. Section 4: Special Entity-related structures
  47. 4.1: Moving platforms
  48.  
  49. Section 1: Intro
  50.  
  51. 1.1 What's new:
  52. More organized, table of contents, contributors list, fixed some stuff. The "model" tag is something you don't have to worry about. This is just a reference that QBSP puts into the final BSP file, telling Quake
  53. which brush the entity behavior attaches to. Everything that I used to give a "model" tag in here now tells you that it must attach to a brush. This means that it must be put inside the actual brush declaration statement. Ex:
  54.  
  55. {
  56.     "classname" "trigger_changelevel"
  57.     "map" "e1m1"    // Map to change to on trigger
  58.  
  59.     {
  60.     <INSERT BRUSH DATA HERE>
  61.     }
  62.  
  63. }
  64.  
  65.  
  66. 1.2 Contributors: 
  67.  
  68. Thomas Winzig - Confirmation on the "model" tag's behavior. HTMLization of this doc.
  69. Clarified several things. Reorganized the document structure a little bit.
  70. Brian Hackert - Info on how to use func_train and path_corner.  Told me that "targetname" and "target" can have real names for their argument, not just numbers.
  71.  
  72.  
  73. Section 2: General entity/.map information
  74.  
  75. 2.1 .map Header (entity #0):
  76.  
  77. "sounds" "#"             // Tells the CD player which track to play.
  78. "classname" "worldspawn" // Tells Quake to spawn the world
  79. "wad" "DIRPATH" // tells what graphics (texture) WAD2 file to use.
  80. "message" "TITLE" // The title of the level
  81. "worldtype" "#" // Describes environment? 0, 1 (Ziggurat Vertigo's), 2 will work
  82.  
  83. 2.2 "spawnflags" tag: 
  84. I believe that anything with an origin tag can have an optional 'spawnflags' tag. This is not confirmed, however. I'll be working
  85. out the bits soon!
  86.  
  87. 1 - Larger Health/Larger Ammo
  88. 2 - Megahealth
  89.  
  90. 2.3 Optional parameters for triggers:
  91.  
  92. "message" "MESSAGETEXT" (use \n for linebreaks) - Displays message
  93.  on screen.  Can be put in any trigger block - but will only work in some. For
  94.  example, Quake won't give an error if you put a "message" block in a monster's
  95.  declaration, but you won't see the message, either (AFAIK).
  96.  
  97. "wait" "#" // Waits # 10ths of a second.  Can be put in any trigger block.
  98.  
  99. 2.4 General Entity syntax:
  100. In order to complement the Unofficial Quake Specs, rather than confuse, we will follow what those authors have described
  101. as far as entities are concerned. Maybe this document will eventually be
  102. added into the UQS? 
  103. John Wakelin (a partial author of UQS) says this about the entities in Quake:
  104. The entities define the monsters, things, but also the positions in space
  105. where something must happen. So they are the Quake equivalent of both the THINGS and the LINEDEF types from DOOM.
  106. The entity definitions are made up of a series of specific details that
  107. define what each is, where it starts, when it appears etc. Each specific is followed
  108. by a modifier that arguments it. All definitions have the classname specific that identifies that entity. The classname specifics relate intimately with the code lump and are the names of functions written in QuakeC.
  109. I have chosen the terms ``specific'' and ``arg'' for the two different parts
  110. of each detail of the definition. These terms may or may not suit but, they
  111. will have to do until we learn what id calls them.
  112. Line feeds (ASCII 0x0a) separate each definition and each line in the definition. Spaces (ASCII 0x20) separate specifics from args. I tried changing them around and it does not seem to matter what separates them as long as
  113. it is white space.
  114. I should add that you can also use C++ style comments in map files, as we
  115. do throughout the entity descriptions. Here are the known 'specifics' and
  116. 'args' in Quake shareware (mainly reproduced from the UQS):
  117.  
  118. Specifics    Args      Description
  119. --------------------------------------------------------------------------------
  120. "classname"  "name"    // Type of entity to be defined (mandatory)
  121. "origin"     "X Y Z"   // Coordinates of where it starts in space.
  122. "angle"      "#"       // Direction it faces or moves (sometimes in degrees)
  123. "light"      "#"       // Used with the light classname.
  124. "target"     "t#"      // Matches a targetname.
  125. "targetname" "t#"      // Like a linedef tag.
  126. "wad"        "wadfile" // The wad2 graphics file used by the world for textures.
  127. "spawnflags" "#"       // Used to flag/describe an entity that is not default.
  128. {BRUSH INFO}           // In entities that describe triggers/doors/platforms, etc,
  129.                        // the brush info is inserted into the entity brackets,
  130.                        // delimited by another set of brackets.
  131.  
  132. "model" specifics/args:
  133.  
  134. "speed"      "#"       // How fast the model is moved.
  135. "wait"       "#"       // How long a pause between completion of movement or
  136.                        // return to original position (in seconds or 10ths)
  137. "lip"        "#"       // Seems to be a means of adjusting the starting position.
  138. "style"      "#"       // Possibly similar to a spawnflag?
  139. "dmg"        "#"       // How much damage the model causes when it shuts on you?
  140. ---------------------------------------------------------------------------------
  141.  
  142. {
  143.     "specific1" "arg1" // The first descriptors (usually classname)
  144.     "specific2" "arg2" // The second
  145.     ...                // Etc...
  146.  
  147.     {
  148.         <INSERT BRUSH INFO HERE> // for entities like doors/triggers/platforms/etc
  149.     }
  150. }
  151.  
  152. 2.5 All known entities:
  153.  
  154. air_bubbles                   : Rising bubbles
  155.  
  156. ambient_drip                  : Dripping sound
  157. ambient_drone                 : Engine/machinery sound
  158. ambient_comp_hum              : Computer background sounds
  159. ambient_swamp1                : Frogs croaking
  160. ambient_swamp2                : Slightly different sounding frogs croaking
  161.  
  162. event_lightning               : Lightning (Used to kill Cthon, shareware boss)
  163.  
  164. func_door                     : Door
  165. func_door_secret              : A door that is triggered to open
  166. func_wall                     : A moving wall?
  167. func_button                   : A button
  168. func_train                    : A platform (moves along a "train")
  169. func_plat                     : A lift/elevator
  170. func_dm_only                  : A teleporter that only appears in deathmatch
  171.  
  172. info_null                     : no idea
  173. info_intermission             : Cameras positioning for intermission (?)
  174. info_player_start             : Main player starting point (only one allowed)
  175. info_player_deathmatch        : A deathmatch start (more than one allowed)
  176. info_player_coop              : A coop player start (more than one allowed)
  177. info_player_start2            : ? Player2 start?
  178. info_teleport_destination     : Gives coords for a teleport destination using a targetname
  179.  
  180. item_cells                    : Ammo for the Thunderbolt
  181. item_rockets                  : Ammo for Rocket/Grenade Launcher
  182. item_shells                   : Ammo for both Shotgun and SuperShotgun
  183. item_spikes                   : Ammo for Perforator and Super Perforator
  184. item_health                   : Medkit
  185. item_artifact_envirosuit      : Environmental Protection Suit
  186. item_artifact_super_damage    : Quad Damage
  187. item_artifact_invulnerability : Pentagram of Protection
  188. item_artifact_invisibility    : Ring of Shadows (Invisibility)
  189. item_armorInv                 : Red armor
  190. item_armor2                   : Yellow armor
  191. item_armor1                   : Green armor
  192. item_key1                     : Silver Key
  193. item_key2                     : Gold Key
  194. item_sigil                    : Sigil (a rune)
  195.  
  196. light                         : A projected light. No visible lightsource.
  197. light_torch_small_walltorch   : Small wall torch (gives off light)
  198. light_flame_large_yellow      : Large yellow fire (does not give off light?)
  199. light_flame_small_yellow      : Small yellow fire (does not give off light?)
  200. light_flame_small_white       : Small white fire  (does not give off light?)
  201. light_fluoro                  : Fluorescent light? (Gives off light)
  202. light_fluorospark             : Fluorescent light? (Gives off light, makes sparking sound)
  203.  
  204. monster_army                  : Grunt
  205. monster_dog                   : Attack dog
  206. monster_ogre                  : Ogre
  207. monster_knight                : Knight
  208. monster_zombie                : Zombie
  209. monster_wizard                : Scragg (Wizard)
  210. monster_demon1                : Fiend (Demon)
  211. monster_shambler              : Shambler
  212. monster_boss                  : Cthon (Boss of Shareware Quake)
  213.  
  214. misc_fireball                 : Small fireball (gives off light, harms player)
  215. misc_explobox                 : Nuclear container (explodes upon being shot, harms player)
  216.  
  217. path_corner                   : Used to define path of func_train platforms
  218.  
  219. trap_spikeshooter             : Shoots spikes (nails)
  220.  
  221. trigger_teleport              : Teleport (all trigger_ tags are triggered by walkover)
  222. trigger_changelevel           : Changes to another level
  223. trigger_setskill              : Changes skill level
  224. trigger_counter               :
  225. trigger_once                  : Triggers action only once
  226. trigger_multiple              : Triggers action (can be retriggered)
  227. trigger_onlyregistered        : Triggers only if game is registered (registered == 1)
  228. trigger_secret                : Triggers action and awards secret credit.
  229. trigger_monsterjump           : Causes a targeted monster to jump [off something]?
  230. trigger_relay                 : 
  231.  
  232. weapon_supershotgun           : SuperShotgun
  233. weapon_nailgun                : Perforator
  234. weapon_supernailgun           : Super Perforator
  235. weapon_grenadelauncher        : Grenade Launcher
  236. weapon_rocketlauncher         : Rocket Launcher
  237. weapon_lightning              : Thunderbolt Cannon
  238.  
  239. Section 3: Entity 'class' examples
  240. 3.1 Lights
  241.  
  242. Regular Light:
  243.  
  244. {
  245.     "classname" "light"
  246.     "origin" "X Y Z"    // Tells where the light is.
  247.     "light" "#"         // Tells how bright the light is. (optional - default 200)
  248. }
  249.  
  250. Light that must be switched on to give illumination:
  251.  
  252. {
  253.     "classname" "light"
  254.     "origin" "X Y Z"
  255.     "style" "32"        // Tells Quake light must be switched on (?)
  256.     "targetname" "t#"   // Target i.d. of "switch"
  257. }
  258.  
  259. Torches:
  260.  
  261. {
  262.     "classname" "light_torch_small_walltorch"
  263.     "origin" "X Y Z"
  264.     "light" "INTENSITY"
  265.     "style" "#"         // ??? 1,2 will work (optional)
  266. }
  267.  
  268. Fire:
  269.  
  270. {
  271. "classname" "light_flame_large_yellow, light_flame_small_yellow, light_flame_small_white"
  272. "origin" "X Y Z"
  273. }
  274.  
  275. Fluorescent Light:
  276.  
  277. {
  278.     "classname" "light_fluoro"
  279.     "origin" "X Y Z"
  280.     "light" "#"
  281. }
  282.  
  283. Fluorescent Light (makes sparking sound):
  284.  
  285. {
  286.     "classname" "light_fluorospark"
  287.     "origin" "X Y Z" 
  288.     "light" "#"
  289.     "style" "##" // ??? 10 will work 
  290. }
  291.  
  292. 3.2 Player Movement Entities
  293.  
  294. Level Change Trigger (attaches to brush):
  295.  
  296. {
  297.     "classname" "trigger_changelevel"
  298.     "map" "mapname"  // Map to change to on trigger (e.g. e1m8)
  299.     "spawnflags" "#" // Flags describing the object (optional)
  300.  
  301.     {
  302.         <INSERT BRUSH INFO HERE>
  303.     }
  304.  
  305. }
  306.  
  307. Teleport Trigger (attaches to brush):
  308.  
  309. {
  310.     "classname" "trigger_teleport"
  311.     "target" "t#"     // Teleport destination name to teleport to.
  312.  
  313.     {
  314.         <INSERT BRUSH INFO HERE>
  315.     {
  316.  
  317. }
  318.  
  319. Teleport Destination:
  320.  
  321. {
  322.     "classname" "info_teleport_destination"
  323.     "origin" "X Y Z"
  324.     "angle" "#"       // angle the player will face upon leaving teleport
  325.     "targetname" "t#" // Teleport's trigger name
  326. }
  327.  
  328. 3.3 Movers
  329.  
  330. Door (attaches to brush):
  331.  
  332. {
  333.     "classname" "func_door, func_door_secret"
  334.     "angle" "#" - angle it faces
  335.     "speed" "#" - speed of movement
  336.     "targetname" "#" - Door's trigger name
  337.     "sounds" "#" - sound it makes
  338.     "wait" "#" - delay before closing
  339.     "spawnflags "#" - Flags describing the object (optional)
  340.     "lip" "#" - ??? (optional)
  341.  
  342.     {
  343.         <INSERT BRUSH INFO HERE>
  344.     }
  345. }
  346.  
  347. Possibly a special wall? (attaches to brush):
  348.  
  349. {
  350.     "spawnflags" "#" // flags for something (optional I'd guess)
  351.     "classname" "func_wall"
  352. }
  353.  
  354. A platform (i.e. lift or elevator, attaches to brush):
  355.  
  356. {
  357.     "classname" "func_plat"
  358.     "height" "#" // height it rises? (optional)
  359.     "sounds" "#" // sound it makes (optional)
  360.  
  361.     {
  362.         <INSERT BRUSH INFO HERE>
  363.     }
  364. }
  365.  
  366. Moving platform (Attaches to brush):
  367.  
  368. {
  369.     "classname" "func_train"
  370.     "sounds" "#"  // Sound it makes when activated
  371.     "speed" "#"   // Speed at which it moves (optional)
  372.     "target" "t#" // Trigger name of its first path_corner destination
  373.     "targetname" "t#" // Its trigger name
  374.  
  375.     {
  376.         <INSERT BRUSH INFO HERE>
  377.     }
  378. }
  379.  
  380. Describes path of train:
  381.  
  382. {
  383.     "classname" "path_corner"
  384.     "origin" "X Y Z"
  385.     "target" "t#"     // Trigger name of next train destination.
  386.     "targetname" "t#" // It's trigger name.
  387.  
  388.     {
  389.         <INSERT BRUSH INFO HERE>
  390.     }
  391. }
  392.  
  393. 3.4 Triggers/Switches
  394.  
  395. A button/switch (attaches to brush):
  396.  
  397. {
  398.     "classname" "func_button"
  399.     "angle" "#"   // Angle button moves?
  400.     "speed" "#"   // Speed it moves in?
  401.     "target" "t#" // Trigger name of target entity
  402.     "sounds" "#"  // Sound it makes when activated
  403.     "wait" "#"    // wait before action?  Wait until retrigger?
  404.  
  405.     {
  406.         <INSERT BRUSH INFO HERE>
  407.     }
  408. }
  409.  
  410. Walk-over trigger (attaches to brush):
  411.  
  412. {
  413.     "classname" "trigger_once, trigger_multiple, trigger_onlyregistered, trigger_secret, trigger_monsterjump"
  414.     "style" "32"      // maybe other #s will work?
  415.     "killtarget" "t#" // switch to "off" state perhaps? Only w/some triggers? (optional)
  416.     "target" "t#"     // Trigger name of target
  417.     "sounds" "#"      // Sound made when triggered
  418.  
  419.     {
  420.         <INSERT BRUSH INFO HERE>
  421.     }
  422. }
  423.  
  424. Sounds like an interesting trigger:
  425.  
  426. {
  427.     "classname" "trigger_relay"
  428.     "origin" "X Y Z" // Where it is located
  429.     "target" "t#" // Trigger name of its target
  430. }
  431.  
  432. Another strange trigger tag (attaches to brush):
  433.  
  434. {
  435.     "classname" "trigger_counter" 
  436.     "targetname" "t#" // Its trigger name
  437.     "target" "t#"  // Trigger name of its target
  438.  
  439.     {
  440.         <INSERT BRUSH INFO HERE>
  441.     }
  442. }
  443.  
  444.  
  445. 3.5 Traps/Things harmful to you:
  446.  
  447. Nail-firing trap:
  448.  
  449. {
  450.     "classname" "trap_spikeshooter"
  451.     "origin" "X Y Z"
  452.     "angle" "#" // Angle the trap fires at
  453.     "targetname" "t#" // Trap's trigger name
  454.     "spawnflags" "#"  // ??? 1024 works
  455. }
  456.  
  457. Fireballs:
  458.  
  459. {
  460.     "classname" "misc_fireball"
  461.     "origin" "X Y Z"
  462.     "speed" "#" // Tells how fast the fireball moves
  463. }
  464.  
  465. 3.6 Misc/Stuff I have no idea about:
  466.  
  467.  
  468. Cameras for the intermission screen:
  469.  
  470. {
  471.     "classname" "info_intermission"
  472.     "origin" "X Y Z" // location of camera
  473.     "mangle" "X Y Z" // location the camera looks at
  474.     "angle" "#" // angle of the camera
  475. }
  476.  
  477. Setting difficulty level (attaches to brush):
  478. {
  479.     "classname" "trigger_setskill"
  480.     "message" "#"   // Skill level to change to.
  481.  
  482.     {
  483.         <INSERT BRUSH INFO HERE>
  484.     }
  485. }
  486.  
  487. Lightning used to kill the boss of shareware.  I'll figure out how to use
  488. it later...  I pretty much know how, I just want to test it before I
  489. put it here :).  From the testing I've done, the lightning produced will
  490. not damage a player, however.  It probably triggers a script to give the
  491. boss character damage.
  492. {
  493.     "classname" "event_lightning"
  494.     "origin" "X Y Z"  // location of lightning (origin?)
  495.     "targetname" "t#" // It's trigger name
  496. }
  497.  
  498. 4.1 Moving Platforms:
  499.  
  500. Creating a moving platform isn't that difficult.  First, you must define the
  501. brush that will do the moving.  Here's an example:
  502.  
  503. {
  504. "classname" "func_train"
  505. "sounds" "1"
  506. "speed" "128"
  507. "target" "t1dest1"
  508. "targetname" "t1"
  509.     {
  510.         ( -768 0 0 ) ( -768 1 0 ) ( -768 0 1 ) GROUND1_6 0 0 0 1.0 1.0
  511.         ( -640 0 0 ) ( -640 0 1 ) ( -640 1 0 ) GROUND1_6 0 0 0 1.0 1.0
  512.         ( 0 -384 0 ) ( 0 -384 1 ) ( 1 -384 0 ) GROUND1_6 0 0 0 1.0 1.0
  513.         ( 0 -256 0 ) ( 1 -256 0 ) ( 0 -256 1 ) GROUND1_6 0 0 0 1.0 1.0
  514.         ( 0 0 -256 ) ( 1 0 -256 ) ( 0 1 -256 ) GROUND1_6 0 0 0 1.0 1.0
  515.         ( 0 0 -128 ) ( 0 1 -128 ) ( 1 0 -128 ) GROUND1_6 0 0 0 1.0 1.0
  516.     }
  517. }
  518.  
  519. Now you define each of the path_corners it will travel to.  When it reaches
  520. a path_corner, it will float to the next path_corner defined in the "trigger"
  521. tag of the path_corner.  The platform will start at the path_corner pointed
  522. to by the platform's "trigger" tag.  It will continue the loop indefinitely
  523. and it will go through walls to get to its destination.  Here's its path_corners
  524. would look like:
  525.  
  526. {
  527. "classname" "path_corner"
  528. "origin" "0 0 0"
  529. "targetname" "t1dest1"
  530. "target"" "t1dest2"
  531. }
  532.  
  533. {
  534. "classname" "path_corner"
  535. "origin" "0 128 0"
  536. "targetname" "t1dest2"
  537. "target"" "t1dest1"
  538. }
  539.  
  540. 4.2 Monsters and Triggers:
  541.  
  542. Have you been wondering how you can get events to trigger when a monster dies, as first
  543. seen in E1M2 with the demons?  Well, it's not too difficult.  When you attach a
  544. trigger tag to a monster, the monster's death will trigger the event.  I believe
  545. (not tested) that if other monsters have a triggername tag the same as a monster
  546. with the trigger tag, the trigger event will only occur when all monsters with
  547. a matching triggername tag are dead.  The monster with the trigger tag need not
  548. have the triggername tag.
  549.  
  550.  
  551. Quake is Copyright 1996 id Software. Some information about entities was obtained from the Unofficial Quake Specs, a truly awesome reference guide to Quake editing (although a little outdated in some respects). 
  552. Disclaimer: This document is provided as is and may not be perfect.  I do not guarentee the validity of any of the information in it.  I will not be held liable or responsible for any damages caused from use or misuse of the information contained within this document.
  553.  
  554.  
  555.